package com.xuelang.pipeline.app.application;

import com.xuelang.pipeline.client.application.dto.ApplicationComponentDTO;
import com.xuelang.pipeline.client.application.dto.ApplicationDTO;
import com.xuelang.pipeline.client.application.dto.ApplicationQuery;
import com.xuelang.pipeline.client.application.dto.MyApplicationDTO;
import com.xuelang.pipeline.client.common.request.PageParam;
import com.xuelang.pipeline.client.common.result.PageRecord;

import java.util.List;

/**
 * 应用服务接口
 *
 * @author liuyuan.ly
 * @since 2024/5/14 9:50
 */
public interface ApplicationService {
    /**
     * 查询应用列表(有过滤条件)
     *
     * @param dtoPageParam
     * @return
     */
    PageRecord<ApplicationDTO> pageList(PageParam<ApplicationQuery> dtoPageParam);

    /**
     * 查询我的应用列表(有过滤条件)
     *
     * @param dtoPageParam
     * @return
     */
    PageRecord<MyApplicationDTO> pageMyApps(PageParam<ApplicationQuery> dtoPageParam);

    /**
     * 查询应用列表(有过滤条件)
     *
     * @param applicationQuery
     * @return
     */
    List<ApplicationDTO> list(ApplicationQuery applicationQuery);

    /**
     * 根据关键字查询
     * @param keyword
     * @return
     */
    ApplicationDTO queryByKeyword(String keyword);

    /**
     * 新增应用
     *
     * @param applicationDTO
     * @return
     */
    Boolean add(ApplicationDTO applicationDTO);

    /**
     * 更新应用
     *
     * @param applicationDTO
     * @return
     */
    Boolean update(ApplicationDTO applicationDTO);

    /**
     * 删除应用
     *
     * @param code
     * @return
     */
    Boolean delete(String code);
    /**
     * 查询应用列表-携带组件信息(无过滤条件)
     *
     * @param applicationQuery
     * @return
     */
    List<ApplicationComponentDTO> listWithComponent(ApplicationQuery applicationQuery);

    List<ApplicationComponentDTO> applicationListWithComponentPermissions(ApplicationQuery applicationQuery);

    /**
     * 查询应用
     *
     * @param code
     * @return
     */
    ApplicationComponentDTO query(String code);
}
